import re

# re.match(pattern, string)
# pattern     匹配的正则表达式
# string      要匹配的字符串
"""
    注意点：re.match()方法返回一个匹配的对象，而不是匹配的内容。如果需要返回内容则需要调用group()。通过调用span()可以获得匹配结果的位置。
而如果从起始位置开始没有匹配成功，即便其他部分包含需要匹配的内容，re.match()也会返回None
"""


class Match:
    s = "phone_number=awkjklqwjrlwqlkr"

    # 单字符匹配 (使用一个符号就表示匹配一个字符)
    @classmethod
    def single_match(cls):
        """
            .表示匹配一个字符，除了\n
            []表示匹配[]中列举的任意一个字符 [^]表示不匹配[]中列举的任意一个字符 [a-z1-9]表示匹配a-z和1-9中任意一个字符
            \d表示匹配数字 0-9
            \D表示匹配非数字，字母或者特殊字符，空格不行
            \s表示匹配空白即tab和空格
            \S表示匹配非空白
            \w表示匹配a~z,A~Z,0-9和"_"
            \W表示匹配非a~z,A~Z,0-9和"_"
        """
        print(re.match("..", Match.s))  # 表示匹配两个字符，如果没有匹配到两个字符会返回None

    # 多字符匹配
    @classmethod
    def match_more(cls):
        """
            *表示匹配前一个字符0次或者无数次,如果匹配的字符串为空也不会返回None
            +表示匹配前一个字符1次或者无数次，至少1次
            ？表示匹配前一个字符1次或者0次，0次表示及时匹配不到也无所谓，不会返回None
            {m}匹配前一个字符m次
            {m,}匹配前一个字符至少m次
            {m,n}匹配前一个字符m~n次
        """
        print(re.match(".*", Match.s))
        print(re.match("c?", Match.s))
        print(re.match(r"\D+=.*", Match.s))  # 表示匹配到=号前面和后面的所有字符

    @classmethod
    def group_match(cls):
        """
            |表示匹配左右任意一个表达式
            (ab)表示将匹配到的元素放入至一个元组中,用在想要获取特定的一个字符
        """

        print(re.match(r'\d[1-9]|\D[a-z]', '2233'))  # 匹配|两边任意一个表达式
        print(re.match(r'\d[1-9]|\D[a-z]', 'as'))
        print("-" * 100)
        a = re.match(r'<h1>(.*)<h1>', '<h1>你好啊<h1>')
        print(a)
        print(a.group())  # 输出匹配的字符
        print(a.groups())  # 会将()中的内容会作为一个元组字符装在元组中
        print('`````````````')
        b = re.match(r'<h1>(.*)(<h1>)', '<h1>你好啊<h1>')
        print(b.groups())  # 有两括号就分为两个元组元素
        print(b.group(0))  # group中默认是0
        print(b.group(1))  # 你好啊
        print(b.group(2))  # h1

    @classmethod
    def beforeAndEnd_match(cls):
        """
            ^表示匹配字符串开头
            $表示匹配字符串结尾
        """
        print(re.match(r".*k$", "awfwrfqwk"))  # 匹配的字符串必须以k结尾，否则返回None
        print(re.match(r"^a.*", "awfwrfqwk"))


# Match.single_match()
# Match.match_more()
# Match.group_match()
Match.beforeAndEnd_match()
